home *** CD-ROM | disk | FTP | other *** search
- // commander.cpp
-
- #include "commander.h"
-
-
- // initialize static vars
- commander* commander::s_top_commander = NULL;
- commander* commander::s_default_super = NULL;
-
-
- #pragma mark Public:
-
- //
- // constructor
- //
- commander::commander(commander* in_super)
- {
- m_super = in_super;
- m_sub = NULL;
- m_next = NULL;
- add();
- }
-
- //
- // default constructor
- //
- commander::commander()
- {
- m_super = s_default_super;
- m_sub = NULL;
- m_next = NULL;
- add();
- }
-
- //
- // destructor
- //
- commander::~commander() {
- if (m_next!=NULL)
- delete m_next;
- remove();
- }
-
- //
- // do_cmd
- //
- Boolean
- commander::do_cmd (int in_eventID, void* io_data) {
- Boolean handled = do_cmd_self (in_eventID, io_data);
-
- if ((not handled) && (m_sub!=NULL))
- handled = m_sub->do_cmd (in_eventID, io_data);
-
- commander* item = m_next;
- while ((not handled) && (item!=NULL)) {
- handled = item->do_cmd (in_eventID, io_data);
- item = item->m_next;
- }
-
- return handled;
- }
-
- //
- // dispatch_command
- //
- Boolean
- commander::dispatch_command (int in_eventID, void* io_data) {
- Boolean handled = false;
-
- if (s_top_commander!=NULL)
- handled = s_top_commander->do_cmd (in_eventID, io_data);
- return handled;
- }
-
-
- #pragma mark -
- #pragma mark Private:
-
- //
- // add()
- //
- void
- commander::add() {
- this->m_next = NULL;
- if (m_super==NULL) return;
-
- commander* p = m_super->get_sub();
-
- if (p==NULL) {
- m_super->set_sub(this);
- } else {
- while (p->m_next != NULL) {
- p = p->m_next;
- }
- p->m_next = this;
- }
- }
-
- //
- // remove()
- //
- void
- commander::remove() {
- if (m_super==NULL) return;
-
- commander* p = m_super->get_sub();
- commander* next = this->m_next;
-
- this->m_next = NULL;
- if (p==this) {
- m_super->set_sub(next);
- } else {
- while (p!=NULL) {
- if (p->m_next == this) {
- p->m_next = next;
- break;
- }
- p = p->m_next;
- }
- }
- }
-